<!DOCTYPE html>
<html class="client-nojs vector-feature-night-mode-disabled vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-sticky-header-enabled" lang="en" dir="ltr"><head>
<meta charset="UTF-8">
<title>Distributed lock manager</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="canonical" href="https://en.wikipedia.org/wiki/Distributed_lock_manager"> <link href="./mw/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/user.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link rel="stylesheet" type="text/css" href="./mw/site.styles.css">
<link rel="stylesheet" type="text/css" href="./mw/noscript.css">
<link rel="stylesheet" type="text/css" href="./footer.css">
<link rel="stylesheet" type="text/css" href="./vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Distributed_lock_manager rootpage-Distributed_lock_manager skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading">
<span id="openzim-page-title" class="mw-page-title-main"><span class="mw-page-title-main">Distributed lock manager</span></span>
</h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="en" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="en" dir="ltr"><style data-mw-deduplicate="TemplateStyles:r1251242444">
/* start https://en.wikipedia.org/ */
.mw-parser-output .ambox{border:1px solid #a2a9b1;border-left:10px solid #36c;background-color:#fbfbfb;box-sizing:border-box}.mw-parser-output .ambox+link+.ambox,.mw-parser-output .ambox+link+style+.ambox,.mw-parser-output .ambox+link+link+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+style+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+link+.ambox{margin-top:-1px}html body.mediawiki .mw-parser-output .ambox.mbox-small-left{margin:4px 1em 4px 0;overflow:hidden;width:238px;border-collapse:collapse;font-size:88%;line-height:1.25em}.mw-parser-output .ambox-speedy{border-left:10px solid #b32424;background-color:#fee7e6}.mw-parser-output .ambox-delete{border-left:10px solid #b32424}.mw-parser-output .ambox-content{border-left:10px solid #f28500}.mw-parser-output .ambox-style{border-left:10px solid #fc3}.mw-parser-output .ambox-move{border-left:10px solid #9932cc}.mw-parser-output .ambox-protection{border-left:10px solid #a2a9b1}.mw-parser-output .ambox .mbox-text{border:none;padding:0.25em 0.5em;width:100%}.mw-parser-output .ambox .mbox-image{border:none;padding:2px 0 2px 0.5em;text-align:center}.mw-parser-output .ambox .mbox-imageright{border:none;padding:2px 0.5em 2px 0;text-align:center}.mw-parser-output .ambox .mbox-empty-cell{border:none;padding:0;width:1px}.mw-parser-output .ambox .mbox-image-div{width:52px}@media(min-width:720px){.mw-parser-output .ambox{margin:0 10%}}@media print{body.ns-0 .mw-parser-output .ambox{display:none!important}}
/* end https://en.wikipedia.org/ */
</style>
<p>A <b>distributed lock manager</b> (<b>DLM</b>) runs in every machine in a cluster, with an identical copy of a cluster-wide lock database. <a href="Operating_system" title="Operating system">Operating systems</a> use lock managers to organise and serialise the access to resources. In this way a DLM provides <a href="Software_application" class="mw-redirect" title="Software application">software applications</a> which are <a href="Distributed_programming" class="mw-redirect" title="Distributed programming">distributed</a> across a cluster on multiple machines with a means to synchronize their accesses to <a href="Shared_resource" title="Shared resource">shared resources</a>.
</p><p>DLMs have been used as the foundation for several successful <a href="Clustered_file_system" title="Clustered file system">clustered file systems</a>, in which the machines in a <a href="Computer_cluster" title="Computer cluster">cluster</a> can use each other's storage via a unified <a href="File_system" title="File system">file system</a>, with significant advantages for performance and <a href="High-availability" class="mw-redirect" title="High-availability">availability</a>. The main performance benefit comes from solving the problem of <a href="Cache_coherency" class="mw-redirect" title="Cache coherency">disk cache coherency</a> between participating computers. The DLM is used not only for <a href="File_locking" title="File locking">file locking</a> but also for coordination of all <a href="Disk_(storage_device)" class="mw-redirect" title="Disk (storage device)">disk</a> access. <a href="VMScluster" title="VMScluster">VMScluster</a>, the first clustering system to come into widespread use, relied on the <a href="OpenVMS" title="OpenVMS">OpenVMS</a> DLM in just this way.
</p>
<meta property="mw:PageProp/toc">
<div class="mw-heading mw-heading2"><h2 id="Resources">Resources</h2></div>
<p>The DLM uses a generalized concept of a <b>resource</b>, which is some entity to which shared access must be controlled. This can relate to a file, a record, an area of <a href="Shared_memory" title="Shared memory">shared memory</a>, or anything else that the <a href="Application_software" title="Application software">application</a> designer chooses. A hierarchy of resources may be defined, so that a number of levels of locking can be implemented. For instance, a hypothetical <a href="Database" title="Database">database</a> might define a resource hierarchy as follows:
</p>
<ul><li>Database</li>
<li>Table</li>
<li>Record</li>
<li>Field</li></ul>
<p>A <a href="Process_(computing)" title="Process (computing)">process</a> can then acquire locks on the database as a whole, and then on particular parts of the database. A lock must be obtained on a parent resource before a subordinate resource can be locked.
</p>
<div class="mw-heading mw-heading2"><h2 id="Lock_modes">Lock modes</h2></div>
<p>A process running within a VMSCluster may obtain a lock on a resource. There are six lock modes that can be granted, and these determine the level of exclusivity being granted, it is possible to convert the lock to a higher or lower level of lock mode. When all processes have unlocked a resource, the system's information about the resource is destroyed.
</p>
<ul><li>Null (NL). Indicates interest in the resource, but does not prevent other processes from locking it. It has the advantage that the resource and its <a href="#Lock_value_block">lock value block</a> are preserved, even when no processes are locking it.</li>
<li>Concurrent Read (CR). Indicates a desire to read (but not update) the resource. It allows other processes to read or update the resource, but prevents others from having exclusive access to it. This is usually employed on high-level resources, in order that more restrictive locks can be obtained on subordinate resources.</li>
<li>Concurrent Write (CW). Indicates a desire to read and update the resource. It also allows other processes to read or update the resource, but prevents others from having exclusive access to it. This is also usually employed on high-level resources, in order that more restrictive locks can be obtained on subordinate resources.</li>
<li>Protected Read (PR). This is the traditional <i>share lock</i>, which indicates a desire to read the resource but prevents other from updating it. Others can however also read the resource.</li>
<li>Protected Write (PW). This is the traditional <i>update lock</i>, which indicates a desire to read and update the resource and prevents others from updating it. Others with Concurrent Read access can however read the resource.</li>
<li>Exclusive (EX). This is the traditional <i>exclusive lock</i> which allows read and update access to the resource, and prevents others from having any access to it.</li></ul>
<p>The following <a href="Truth_table" title="Truth table">truth table</a> shows the compatibility of each lock mode with the others:
</p>
<table class="wikitable">
<tbody><tr>
<th>Mode</th>
<th>NL</th>
<th>CR</th>
<th>CW</th>
<th>PR</th>
<th>PW</th>
<th>EX
</th></tr>
<tr>
<th>NL
</th>
<td style="background:#9EFF9E;color:black;vertical-align:middle;text-align:center;" class="table-yes">Yes</td>
<td style="background:#9EFF9E;color:black;vertical-align:middle;text-align:center;" class="table-yes">Yes</td>
<td style="background:#9EFF9E;color:black;vertical-align:middle;text-align:center;" class="table-yes">Yes</td>
<td style="background:#9EFF9E;color:black;vertical-align:middle;text-align:center;" class="table-yes">Yes</td>
<td style="background:#9EFF9E;color:black;vertical-align:middle;text-align:center;" class="table-yes">Yes</td>
<td style="background:#9EFF9E;color:black;vertical-align:middle;text-align:center;" class="table-yes">Yes
</td></tr>
<tr>
<th>CR
</th>
<td style="background:#9EFF9E;color:black;vertical-align:middle;text-align:center;" class="table-yes">Yes</td>
<td style="background:#9EFF9E;color:black;vertical-align:middle;text-align:center;" class="table-yes">Yes</td>
<td style="background:#9EFF9E;color:black;vertical-align:middle;text-align:center;" class="table-yes">Yes</td>
<td style="background:#9EFF9E;color:black;vertical-align:middle;text-align:center;" class="table-yes">Yes</td>
<td style="background:#9EFF9E;color:black;vertical-align:middle;text-align:center;" class="table-yes">Yes</td>
<td style="background:#FFC7C7;color:black;vertical-align:middle;text-align:center;" class="table-no">No
</td></tr>
<tr>
<th>CW
</th>
<td style="background:#9EFF9E;color:black;vertical-align:middle;text-align:center;" class="table-yes">Yes</td>
<td style="background:#9EFF9E;color:black;vertical-align:middle;text-align:center;" class="table-yes">Yes</td>
<td style="background:#9EFF9E;color:black;vertical-align:middle;text-align:center;" class="table-yes">Yes</td>
<td style="background:#FFC7C7;color:black;vertical-align:middle;text-align:center;" class="table-no">No</td>
<td style="background:#FFC7C7;color:black;vertical-align:middle;text-align:center;" class="table-no">No</td>
<td style="background:#FFC7C7;color:black;vertical-align:middle;text-align:center;" class="table-no">No
</td></tr>
<tr>
<th>PR
</th>
<td style="background:#9EFF9E;color:black;vertical-align:middle;text-align:center;" class="table-yes">Yes</td>
<td style="background:#9EFF9E;color:black;vertical-align:middle;text-align:center;" class="table-yes">Yes</td>
<td style="background:#FFC7C7;color:black;vertical-align:middle;text-align:center;" class="table-no">No</td>
<td style="background:#9EFF9E;color:black;vertical-align:middle;text-align:center;" class="table-yes">Yes</td>
<td style="background:#FFC7C7;color:black;vertical-align:middle;text-align:center;" class="table-no">No</td>
<td style="background:#FFC7C7;color:black;vertical-align:middle;text-align:center;" class="table-no">No
</td></tr>
<tr>
<th>PW
</th>
<td style="background:#9EFF9E;color:black;vertical-align:middle;text-align:center;" class="table-yes">Yes</td>
<td style="background:#9EFF9E;color:black;vertical-align:middle;text-align:center;" class="table-yes">Yes</td>
<td style="background:#FFC7C7;color:black;vertical-align:middle;text-align:center;" class="table-no">No</td>
<td style="background:#FFC7C7;color:black;vertical-align:middle;text-align:center;" class="table-no">No</td>
<td style="background:#FFC7C7;color:black;vertical-align:middle;text-align:center;" class="table-no">No</td>
<td style="background:#FFC7C7;color:black;vertical-align:middle;text-align:center;" class="table-no">No
</td></tr>
<tr>
<th>EX
</th>
<td style="background:#9EFF9E;color:black;vertical-align:middle;text-align:center;" class="table-yes">Yes</td>
<td style="background:#FFC7C7;color:black;vertical-align:middle;text-align:center;" class="table-no">No</td>
<td style="background:#FFC7C7;color:black;vertical-align:middle;text-align:center;" class="table-no">No</td>
<td style="background:#FFC7C7;color:black;vertical-align:middle;text-align:center;" class="table-no">No</td>
<td style="background:#FFC7C7;color:black;vertical-align:middle;text-align:center;" class="table-no">No</td>
<td style="background:#FFC7C7;color:black;vertical-align:middle;text-align:center;" class="table-no">No
</td></tr></tbody></table>
<div class="mw-heading mw-heading2"><h2 id="Obtaining_a_lock">Obtaining a lock</h2></div>
<p>A process can obtain a lock on a resource by <i>enqueueing</i> a lock request. This is similar to the <a href="QIO" title="QIO">QIO</a> technique that is used to perform I/O. The enqueue lock request can either complete synchronously, in which case the process waits until the lock is granted, or asynchronously, in which case an <a href="Asynchronous_System_Trap" class="mw-redirect" title="Asynchronous System Trap">AST</a> occurs when the lock has been obtained.
</p><p>It is also possible to establish a <i>blocking AST</i>, which is triggered when a process has obtained a lock that is preventing access to the resource by another process. The original process can then optionally take action to allow the other access (e.g. by demoting or releasing the lock).
</p>
<div class="mw-heading mw-heading2"><h2 id="Lock_value_block">Lock value block</h2></div>
<p>A lock value block is associated with each resource. This can be read by any process that has obtained a lock on the resource (other than a null lock) and can be updated by a process that has obtained a protected update or exclusive lock on it.
</p><p>It can be used to hold any information about the resource that the application designer chooses. A typical use is to hold a <i>version number</i> of the resource. Each time the associated entity (e.g. a database record) is updated, the holder of the lock increments the lock value block. When another process wishes to read the resource, it obtains the appropriate lock and compares the current lock value with the value it had last time the process locked the resource. If the value is the same, the process knows that the associated entity has not been updated since last time it read it, and therefore it is unnecessary to read it again. Hence, this technique can be used to implement various types of <a href="Cache_(computing)" title="Cache (computing)">cache</a> in a database or similar application.
</p>
<div class="mw-heading mw-heading2"><h2 id="Deadlock_detection">Deadlock detection</h2></div>
<p>When one or more processes have obtained locks on resources, it is possible to produce a situation where each is preventing another from obtaining a lock, and none of them can proceed. This is known as a <a href="Deadlock_(computer_science)" title="Deadlock (computer science)">deadlock</a> (<a href="E._W._Dijkstra" class="mw-redirect" title="E. W. Dijkstra">E. W. Dijkstra</a> originally called it a <a href="Deadlock_(computer_science)" title="Deadlock (computer science)">deadly embrace</a>).<sup id="cite_ref-1" class="reference"><a href="#cite_note-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup>
</p><p>A simple example is when Process 1 has obtained an exclusive lock on Resource A, and Process 2 has obtained an exclusive lock on Resource B. If Process 1 then tries to lock Resource B, it will have to wait for Process 2 to release it. But if Process 2 then tries to lock Resource A, both processes will wait forever for each other.
</p><p>The OpenVMS DLM periodically checks for deadlock situations. In the example above, the second lock enqueue request of one of the processes would return with a deadlock status. It would then be up to this process to take action to resolve the deadlock—in this case by releasing the first lock it obtained.
</p>
<div class="mw-heading mw-heading2"><h2 id="Linux_clustering">Linux clustering</h2></div>
<p>Both <a href="Red_Hat" title="Red Hat">Red Hat</a> and <a href="Oracle_Corporation" title="Oracle Corporation">Oracle</a> have developed clustering software for <a href="Linux" title="Linux">Linux</a>.
</p><p><a href="OCFS2" title="OCFS2">OCFS2</a>, the Oracle Cluster File System was added<sup id="cite_ref-2" class="reference"><a href="#cite_note-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup> to the official <a href="Linux_kernel" title="Linux kernel">Linux kernel</a> with version 2.6.16, in January 2006. The alpha-quality code warning on OCFS2 was removed in 2.6.19.
</p><p>Red Hat's cluster software, including their DLM and <a href="GFS2" title="GFS2">GFS2</a> was officially added to the Linux kernel <sup id="cite_ref-3" class="reference"><a href="#cite_note-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup> with version 2.6.19, in November 2006.
</p><p>Both systems use a DLM modeled on the venerable VMS DLM.<sup id="cite_ref-4" class="reference"><a href="#cite_note-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup> Oracle's DLM has a simpler API. (the core function, <code>dlmlock()</code>, has eight parameters, whereas the VMS <small><code>SYS$ENQ</code></small> service and Red Hat's <code>dlm_lock</code> both have 11.)
</p>
<div class="mw-heading mw-heading2"><h2 id="Other_implementations">Other implementations</h2></div>
<p>Other DLM implementations include the following:
</p>
<ul><li><a href="Google" title="Google">Google</a> has developed <i>Chubby</i>, a lock service for loosely coupled distributed systems.<sup id="cite_ref-chubby_5-0" class="reference"><a href="#cite_note-chubby-5"><span class="cite-bracket">[</span>5<span class="cite-bracket">]</span></a></sup> It is designed for coarse-grained locking and also provides a limited but reliable distributed file system. Key parts of Google's infrastructure, including <a href="Google_File_System" title="Google File System">Google File System</a>, <a href="Bigtable" title="Bigtable">Bigtable</a>, and <a href="MapReduce" title="MapReduce">MapReduce</a>, use Chubby to synchronize accesses to shared resources. Though Chubby was designed as a lock service, it is now heavily used inside Google as a <a href="Name_server" title="Name server">name server</a>, supplanting <a href="Domain_name_system" class="mw-redirect" title="Domain name system">DNS</a>.<sup id="cite_ref-chubby_5-1" class="reference"><a href="#cite_note-chubby-5"><span class="cite-bracket">[</span>5<span class="cite-bracket">]</span></a></sup></li>
<li><a href="Apache_ZooKeeper" title="Apache ZooKeeper">Apache ZooKeeper</a>, which was created at <a href="Yahoo" title="Yahoo">Yahoo</a>, is <a href="Open-source_software" title="Open-source software">open-source software</a> and can be used to perform distributed locks<sup id="cite_ref-zookeeper_6-0" class="reference"><a href="#cite_note-zookeeper-6"><span class="cite-bracket">[</span>6<span class="cite-bracket">]</span></a></sup> as well.</li>
<li><a href="Etcd" title="Etcd">Etcd</a> is open-source software, developed at <a href="CoreOS" class="mw-redirect" title="CoreOS">CoreOS</a> under the <a href="Apache_License" title="Apache License">Apache License</a>.<sup id="cite_ref-CoreOS_7-0" class="reference"><a href="#cite_note-CoreOS-7"><span class="cite-bracket">[</span>7<span class="cite-bracket">]</span></a></sup> It can be used to perform distributed locks as well.<sup id="cite_ref-etcd_8-0" class="reference"><a href="#cite_note-etcd-8"><span class="cite-bracket">[</span>8<span class="cite-bracket">]</span></a></sup></li>
<li><a href="Redis" title="Redis">Redis</a> is an open source, Redis Source Available License licensed, advanced key-value cache and store.<sup id="cite_ref-redis_9-0" class="reference"><a href="#cite_note-redis-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup> Redis can be used to implement the Redlock Algorithm for distributed lock management.<sup id="cite_ref-redlock_10-0" class="reference"><a href="#cite_note-redlock-10"><span class="cite-bracket">[</span>10<span class="cite-bracket">]</span></a></sup></li>
<li>HashiCorp's <a href="Consul_(software)" title="Consul (software)">Consul</a>,<sup id="cite_ref-consul_11-0" class="reference"><a href="#cite_note-consul-11"><span class="cite-bracket">[</span>11<span class="cite-bracket">]</span></a></sup> which was created by <a href="HashiCorp" title="HashiCorp">HashiCorp</a>, is open-source software and can be used to perform distributed locks as well.</li>
<li>Taooka distributed lock manager<sup id="cite_ref-taooka_12-0" class="reference"><a href="#cite_note-taooka-12"><span class="cite-bracket">[</span>12<span class="cite-bracket">]</span></a></sup> uses the "try lock" methods to avoid <a href="Deadlock_(computer_science)" title="Deadlock (computer science)">deadlocks</a>. It can also specify a TTL for each lock with nanosecond precision.</li>
<li>A DLM is also a key component of more ambitious <a href="Single_system_image" title="Single system image">single system image</a> (SSI) projects such as <a href="OpenSSI" title="OpenSSI">OpenSSI</a>.</li></ul>
<div class="mw-heading mw-heading2"><h2 id="References">References</h2></div>
<style data-mw-deduplicate="TemplateStyles:r1239543626">
/* start https://en.wikipedia.org/ */
.mw-parser-output .reflist{margin-bottom:0.5em;list-style-type:decimal}@media screen{.mw-parser-output .reflist{font-size:90%}}.mw-parser-output .reflist .references{font-size:100%;margin-bottom:0;list-style-type:inherit}.mw-parser-output .reflist-columns-2{column-width:30em}.mw-parser-output .reflist-columns-3{column-width:25em}.mw-parser-output .reflist-columns{margin-top:0.3em}.mw-parser-output .reflist-columns ol{margin-top:0}.mw-parser-output .reflist-columns li{page-break-inside:avoid;break-inside:avoid-column}.mw-parser-output .reflist-upper-alpha{list-style-type:upper-alpha}.mw-parser-output .reflist-upper-roman{list-style-type:upper-roman}.mw-parser-output .reflist-lower-alpha{list-style-type:lower-alpha}.mw-parser-output .reflist-lower-greek{list-style-type:lower-greek}.mw-parser-output .reflist-lower-roman{list-style-type:lower-roman}
/* end https://en.wikipedia.org/ */
</style><div class="reflist">
<div class="mw-references-wrap mw-references-columns"><ol class="references">
<li id="cite_note-1"><span class="mw-cite-backlink"><b><a href="#cite_ref-1">^</a></b></span> <span class="reference-text"><style data-mw-deduplicate="TemplateStyles:r1238218222">
/* start https://en.wikipedia.org/ */
.mw-parser-output cite.citation{font-style:inherit;word-wrap:break-word}.mw-parser-output .citation q{quotes:"\"""\"""'""'"}.mw-parser-output .citation:target{background-color:rgba(0,127,255,0.133)}.mw-parser-output .id-lock-free.id-lock-free a{background:url("./mw/Lock-green.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-limited.id-lock-limited a,.mw-parser-output .id-lock-registration.id-lock-registration a{background:url("./mw/Lock-gray-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-subscription.id-lock-subscription a{background:url("./mw/Lock-red-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .cs1-ws-icon a{background:url("./mw/Wikisource-logo.svg")right 0.1em center/12px no-repeat}body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-free a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-limited a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-registration a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-subscription a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .cs1-ws-icon a{background-size:contain;padding:0 1em 0 0}.mw-parser-output .cs1-code{color:inherit;background:inherit;border:none;padding:inherit}.mw-parser-output .cs1-hidden-error{display:none;color:var(--color-error,#d33)}.mw-parser-output .cs1-visible-error{color:var(--color-error,#d33)}.mw-parser-output .cs1-maint{display:none;color:#085;margin-left:0.3em}.mw-parser-output .cs1-kern-left{padding-left:0.2em}.mw-parser-output .cs1-kern-right{padding-right:0.2em}.mw-parser-output .citation .mw-selflink{font-weight:inherit}@media screen{.mw-parser-output .cs1-format{font-size:95%}html.skin-theme-clientpref-night .mw-parser-output .cs1-maint{color:#18911f}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .cs1-maint{color:#18911f}}
/* end https://en.wikipedia.org/ */
</style><cite id="CITEREFGehani1991" class="citation book cs1">Gehani, Narain (1991). <a rel="nofollow" class="external text" href="https://books.google.com/books?id=E6wOK8OYBG4C&pg=PA105"><i>Ada: Concurrent Programming</i></a>. Silicon Press. p. 105. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>9780929306087</bdi>.</cite></span>
</li>
<li id="cite_note-2"><span class="mw-cite-backlink"><b><a href="#cite_ref-2">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="https://www.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=29552b1462799afbe02af035b243e97579d63350">kernel/git/torvalds/linux.git - Linux kernel source tree</a>. Kernel.org. Retrieved on 2013-09-18.</span>
</li>
<li id="cite_note-3"><span class="mw-cite-backlink"><b><a href="#cite_ref-3">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="https://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=1c1afa3c053d4ccdf44e5a4e159005cdfd48bfc6">kernel/git/torvalds/linux.git - Linux kernel source tree</a> <a rel="nofollow" class="external text" href="https://archive.today/20120718045424/http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=1c1afa3c053d4ccdf44e5a4e159005cdfd48bfc6">Archived</a> 2012-07-18 at <a href="Archive.today" title="Archive.today">archive.today</a>. Git.kernel.org (2006-12-07). Retrieved on 2013-09-18.</span>
</li>
<li id="cite_note-4"><span class="mw-cite-backlink"><b><a href="#cite_ref-4">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="https://lwn.net/Articles/137278/">The OCFS2 filesystem</a>. Lwn.net (2005-05-24). Retrieved on 2013-09-18.</span>
</li>
<li id="cite_note-chubby-5"><span class="mw-cite-backlink">^ <a href="#cite_ref-chubby_5-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-chubby_5-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://research.google.com/archive/chubby.html">Google Research Publication: Chubby Distributed Lock Service</a>. Research.google.com. Retrieved on 2013-09-18.</span>
</li>
<li id="cite_note-zookeeper-6"><span class="mw-cite-backlink"><b><a href="#cite_ref-zookeeper_6-0">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external autonumber" href="https://zookeeper.apache.org/doc/r3.1.2/recipes.html">[1]</a>. Zookeeper.apache.org. Retrieved on 2013-09-18.</span>
</li>
<li id="cite_note-CoreOS-7"><span class="mw-cite-backlink"><b><a href="#cite_ref-CoreOS_7-0">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://coreos.com/">"CoreOS"</a>. <i>coreos.com</i>.</cite></span>
</li>
<li id="cite_note-etcd-8"><span class="mw-cite-backlink"><b><a href="#cite_ref-etcd_8-0">^</a></b></span> <span class="reference-text"><cite class="citation cs2"><a rel="nofollow" class="external text" href="https://github.com/coreos/etcd"><i>etcd: Distributed reliable key-value store for the most critical data of a distributed system</i></a>, CoreOS, 2018-01-16<span class="reference-accessdate">, retrieved <span class="nowrap">2016-09-20</span></span></cite></span>
</li>
<li id="cite_note-redis-9"><span class="mw-cite-backlink"><b><a href="#cite_ref-redis_9-0">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><i>redis.io</i> <a rel="nofollow" class="external text" href="http://redis.io/">http://redis.io/</a><span class="reference-accessdate">. Retrieved <span class="nowrap">2015-04-14</span></span>.</cite> <span class="cs1-visible-error citation-comment"><code class="cs1-code">{{cite web}}</code>: </span><span class="cs1-visible-error citation-comment">Missing or empty <code class="cs1-code">|title=</code> (help)</span></span>
</li>
<li id="cite_note-redlock-10"><span class="mw-cite-backlink"><b><a href="#cite_ref-redlock_10-0">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://redis.io/topics/distlock">"Distributed locks with Redis – Redis"</a>. <i>redis.io</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2015-04-14</span></span>.</cite></span>
</li>
<li id="cite_note-consul-11"><span class="mw-cite-backlink"><b><a href="#cite_ref-consul_11-0">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="https://consul.io/">Consul Overview</a>. Retrieved on 2015-02-19.</span>
</li>
<li id="cite_note-taooka-12"><span class="mw-cite-backlink"><b><a href="#cite_ref-taooka_12-0">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://taooka.com/">Taooka Description</a> <a rel="nofollow" class="external text" href="https://web.archive.org/web/20170503112902/http://taooka.com/">Archived</a> 2017-05-03 at the <a href="Wayback_Machine" title="Wayback Machine">Wayback Machine</a> Retrieved on 2017-05-04.</span>
</li>
</ol></div></div>
<style data-mw-deduplicate="TemplateStyles:r1239549316">
/* start https://en.wikipedia.org/ */
.mw-parser-output .refbegin{margin-bottom:0.5em}.mw-parser-output .refbegin-hanging-indents>ul{margin-left:0}.mw-parser-output .refbegin-hanging-indents>ul>li{margin-left:0;padding-left:3.2em;text-indent:-3.2em}.mw-parser-output .refbegin-hanging-indents ul,.mw-parser-output .refbegin-hanging-indents ul li{list-style:none}@media(max-width:720px){.mw-parser-output .refbegin-hanging-indents>ul>li{padding-left:1.6em;text-indent:-1.6em}}.mw-parser-output .refbegin-columns{margin-top:0.3em}.mw-parser-output .refbegin-columns ul{margin-top:0}.mw-parser-output .refbegin-columns li{page-break-inside:avoid;break-inside:avoid-column}@media screen{.mw-parser-output .refbegin{font-size:90%}}
/* end https://en.wikipedia.org/ */
</style><div class="refbegin" style="">
<ul><li><a rel="nofollow" class="external text" href="https://web.archive.org/web/20101219074254/http://h71000.www7.hp.com/doc/82final/4527/4527pro_044.html#jun_227">HP OpenVMS Systems Services Reference Manual – $ENQ</a></li>
<li><a rel="nofollow" class="external text" href="https://github.com/chadrem/officer">Officer - A simple distributed lock manager written in Ruby</a></li>
<li><a rel="nofollow" class="external text" href="https://sourceforge.net/projects/flom/">FLoM - A free open source distributed lock manager that can be used to synchronize shell commands, scripts and custom developed C, C++, Java, PHP and Python software</a></li></ul>
</div></div><!--htdig_noindex--><div><div class="zim-footer">
This article is issued from <a class="external text" title="Last edited on 2025-03-16" href="https://en.wikipedia.org/wiki/?title=Distributed_lock_manager&oldid=1280807145">Wikipedia</a>. The text is available under <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.en">Creative Commons Attribution-Share Alike 4.0</a> unless otherwise noted. Additional terms may apply for the media files.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>
</body></html>